package com.itheima.reggie.common;

import com.mysql.cj.jdbc.exceptions.MysqlDataTruncation;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;
import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理器
 * 项目中出现的异常就交给全局异常处理器
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    //每一个方法处理一种异常

    //1.处理SQLIntegrityConstraintViolationException异常，数据库employee表中username键值唯一
    @ExceptionHandler
    public R<String> exception1(SQLException e){
        //输出异常信息
        e.printStackTrace();
        //判断是SQL异常的哪一种
        System.out.println(e.getMessage());
        //1.Duplicate entry 'zzy' for key 'idx_username'
        if (e.getMessage().startsWith("Duplicate entry")){
            //截取错误信息
            String username = e.getMessage().split(" ")[2];
            return R.error(username+"用户名已存在");
        }
        if (e.getMessage().contains("Data too long")){
            String col = e.getMessage().split(" ")[7];
            return R.error(col+"数据长度过长");
        }
        return R.error("未知错误");

    }
    //2.处理自定义异常CustomerException
    @ExceptionHandler
    public R<String> exception2(CustomerException e){
        //响应对应的信息给前端

        //将异信息输出给控制台
        return R.error(e.getMessage());
    }



}
